"""
4. 切片的使用

题目：编写一个Python程序，随机生成20个由大小写字母、数字和下划线组成的字符组，并使用字符串、列表、集合和元组的方法打印出来。
对字符串和列表切片，用两种方式取出4-14位的字符。
提示：
    1. 使用random.randint()函数生成随机整数。
    2. 使用random.choice()函数从字符组中随机选择一个字符。
    3. 字符串切片：str[start:end]，列表切片：list[start:end]。
"""

import random

# 随机生成20个字符（请补充完整代码）
import random
import string


# 生成由大小写字母、数字和下划线组成的指定长度的随机字符串
def generate_random_string(length):
    all_characters = string.ascii_letters + string.digits + "_"
    return "".join(random.choice(all_characters) for _ in range(length))


# 生成20个随机字符串
random_strings = [generate_random_string(15) for _ in range(20)]

# 使用字符串方式打印
print("以字符串方式打印：")
for s in random_strings:
    print(s)

# 使用列表方式打印
print("以列表方式打印：")
print(random_strings)

# 使用集合方式打印（注意集合会去除重复元素，这里可能会改变数量）
print("以集合格式打印：")
print(set(random_strings))

# 使用元组方式打印
print("以元组方式打印：")
print(tuple(random_strings))

# 对字符串和列表切片，取出4-14位的字符（以第一个随机字符串为例）
first_string = random_strings[0]
first_list = list(first_string)
print("对字符串切片取4-14位字符的第一种方式：", first_string[4:15])
print("对字符串切片取4-14位字符的第二种方式：", first_string.__getitem__(slice(4, 15)))

print("对列表切片取4-14位字符的第一种方式：", first_list[4:15])
print("对列表切片取4-14位字符的第二种方式：", first_list.__getitem__(slice(4, 15)))

